package com.ltmonitor.web.util;

import java.io.File;
import java.util.Map;
import java.util.Map.Entry;

import javax.servlet.http.HttpServletRequest;

import org.apache.log4j.Logger;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;

/**
 * 文件相关工具类
 * @author shinion
 * date:2019-06-28
 *
 */
public class FileUtil {

	private static Logger mylog = Logger.getLogger(FileUtil.class);
	
	
	/**
	 * 从requet中读取单个文件并在指定位置保存为指定名称的文件
	 * @param request 文件所在请求对象，request内必须包含名为：map.fileName 的文件
	 * @param map 保存文件所需参数：map.fileName ：文件参数名 ; 
	 * map.filePath：文件保存路径，从根目录下第一个文件夹开始,到最后一个目录加'\\'结束，不含文件名 ; map.savefileName：文件保存名称
	 * @return  保存成功返回“”，保存错误返回包含错误信息的字符串
	 */
	public static String SaveOneFileData(HttpServletRequest request, Map map){
		String msg = "";
		try {
			//校验数据
			Object fileNameObject = map.get("fileName");
			Object saveFileNameObject = map.get("saveFileName");
			Object filePathObject = map.get("filePath");
			
			if(fileNameObject ==  null || saveFileNameObject == null || filePathObject == null){
				msg = "缺少保存文件相关参数";
			}
			
			//保存文件
			if(msg.equals("")){
				//获取解析器
				CommonsMultipartResolver resolver = new CommonsMultipartResolver(request.getSession().getServletContext());
				//判断是否是文件
				if(resolver.isMultipart(request)){
					//转换
					MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
					String fileName = fileNameObject.toString();
					MultipartFile fileTemp = multipartRequest.getFile(fileName);
					//文件存在
					if(fileTemp != null){
						String localPath =request.getSession().getServletContext().getRealPath("") + filePathObject.toString() +saveFileNameObject.toString();
						//创建文件对象
						File newFile = new File(localPath);
						if (newFile.getParentFile() != null || !newFile.getParentFile().isDirectory()) {
							// 创建父文件夹
							newFile.getParentFile().mkdirs();
						}
						//上传的文件写入到指定的文件中 
						fileTemp.transferTo(newFile);
						
					}else {
						msg = "文件不存在";
					}
				}
			}
			
			
			
		} catch (Exception e) {
			// TODO: handle exception
			msg = "保存单个文件出错：" + e.getMessage();
			mylog.error(msg);
		}
		System.out.println(msg);
		return msg;
	}
	
	
	
	/**
	 * 输出调试信息
	 * @param msg 信息内容
	 */
	public static void  outDebugInfo(String info) {
		//默认直接sysout输出
		System.out.println(info);
	}
	
	
	/**
	 *输出错误信息
	 * @param info 信息内容
	 */
	public static void outErrorInfo(String info) {
		System.out.println("错误信息："+info);
	}
	
	
	/**
	 * 获取并解析参数数据
	 * @param map
	 */
	public static  String  checkParams(HttpServletRequest request , Map map){
		String msg = "";
		Map mapTemp = request.getParameterMap();
		try {
			if(mapTemp != null){
				for(Object object : mapTemp.entrySet() ){
					Map.Entry<String, Object[]> entry =  (Entry<String, Object[]>) object;
					if(entry.getValue().length > 0){
						if(entry.getValue().length == 1){
							map.put(entry.getKey(), entry.getValue()[0]);
						}else {
							map.put(entry.getKey(), entry.getValue());	
						}
					}
//					System.out.println("参数数量 = " +entry.getValue().length );
					
				}
			}
		} catch (Exception e) {
			msg = "获取并解析数据出错 : " + e.getMessage();
		}
		
		return msg;
	}
	
}
